package de.herzog.bbp.model.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import de.herzog.bbp.model.Klasse;
import de.herzog.bbp.model.Mannschaft;
import de.herzog.bbp.model.Verein;

public class MannschaftDAO extends AbstractDAO {

    public static List<Mannschaft> loadAll() {
        @SuppressWarnings("unchecked")
        List<Mannschaft> list = getSession().createCriteria(Mannschaft.class).list();
        return list;
    }

	public static Mannschaft loadById(Integer id) {
		return (Mannschaft) getSession().load(Mannschaft.class, id);
	}

	public static List<Mannschaft> loadByKlasse(String klasseName) {
		Klasse klasse = KlasseDAO.getByName(klasseName);
		Criteria criteria = getSession().createCriteria(Mannschaft.class);
		criteria.add(Restrictions.eq("klasse", klasse));
		@SuppressWarnings("unchecked")
		List<Mannschaft> list = criteria.list();
		return list;
	}

	public static List<Mannschaft> loadByKlasseVereinNummer(String klasseName, String vereinName,
			Integer nummer) {
		Klasse klasse = KlasseDAO.getByName(klasseName);
		Verein verein = VereinDAO.getByName(vereinName);
		Criteria criteria = getSession().createCriteria(Mannschaft.class);
		criteria.add(Restrictions.eq("klasse", klasse));
		criteria.add(Restrictions.eq("verein", verein));
		criteria.add(Restrictions.eq("nummer", nummer));
		@SuppressWarnings("unchecked")
		List<Mannschaft> list = criteria.list();
		return list;
	}

	public static Mannschaft getByKlasseVereinNummer(String klasseName, String vereinName, String nummer) {
		return getByKlasseVereinNummer(klasseName, vereinName, new Integer(nummer));
	}

	public static Mannschaft getByKlasseVereinNummer(String klasseName, String vereinName, Integer nummer) {
		List<Mannschaft> list = loadByKlasseVereinNummer(klasseName, vereinName, nummer);
		if (list.size() > 1)
			throw new IllegalStateException("Duplicate");
		if (list.size() == 1) {
			return list.get(0);
		} else {
			Klasse klasse = KlasseDAO.getByName(klasseName);
			Verein verein = VereinDAO.getByName(vereinName);
			Mannschaft mannschaft = new Mannschaft(klasse, verein, nummer);
			persist(mannschaft);
			return mannschaft;
		}
	}
}
